"""
UDP编程

TCP是建立可靠连接，并且通信双方都可以以流的形式发送数据。相对TCP，UDP则是面向无连接的协议。
使用UDP协议时，不需要建立连接，只需要知道对方的IP地址和端口号，就可以直接发数据包。但是，能不能到达就不知道了。
虽然用UDP传输数据不可靠，但它的优点是和TCP比，速度快，对于不要求可靠到达的数据，就可以使用UDP协议。

小结：
    UDP的使用与TCP类似，但是不需要建立连接。
    此外，服务器绑定UDP端口和TCP端口互不冲突，也就是说，UDP的9999端口与TCP的9999端口可以各自绑定。
"""

import socket


def run():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定端口
    s.bind(("0.0.0.0", 9999))

    print("绑定UDP的端口9999...")

    while True:
        # 接收数据
        data, addr = s.recvfrom(1024)
        print("接收数据：{data} 地址：{addr}".format(data=data, addr=addr))
        reply = "收到数据:{data}，{addr}".format(data=data, addr=addr)
        s.sendto(reply.encode("utf-8"), addr)


if __name__ == "__main__":
    run()
